package model

import (
	"errors"
	"fmt"
	"yunj/pkg/global"

	"gorm.io/gorm"
)

type Article struct {
	Model
	CategoryId        uint64       `gorm:"column:category_id" json:"category_id" form:"category_id"`
	Title             string       `gorm:"column:title" json:"title" form:"title"`
	Cover             string       `gorm:"column:cover" json:"cover" form:"cover"`
	Keywords          string       `gorm:"column:keywords" json:"keywords" form:"keywords"`
	ViewCount         int          `gorm:"column:view_count" json:"view_count" form:"view_count"`
	Status            int          `gorm:"column:status" json:"status" form:"status"`
	Attr              *ArticleAttr `gorm:"foreignKey:ArticleId;references:Id" json:"attr"`
	DisplayCreateTime string       `gorm:"-" json:"display_create_time"` // 对外展示的创建时间
	Desc              string       `gorm:"-" json:"desc"`                // ES需要
	Content           string       `gorm:"-" json:"content"`
	RelatedCategorys  []*Category  `gorm:"-" json:"related_categorys"`  // 关联的分类（包含当前所属分类）
	Tags              []string     `gorm:"-" json:"tags"`               // 标签
	RecommendArticles []Article    `gorm:"-" json:"recommend_articles"` // 推荐文章
}

// 扩展属性补充
func (m *Article) AttrAppend(articleAttr ...*ArticleAttr) error {
	var attr ArticleAttr
	if len(articleAttr) > 0 {
		attr = *articleAttr[0]
	} else {
		if m.Attr == nil {
			err := global.MySQL.Where("article_id = ?", m.Id).First(&attr).Error
			if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
				return fmt.Errorf("文章属性数据查询失败！%v", err)
			}
			m.Attr = &attr
		}
		attr = *m.Attr
	}
	m.Content = attr.Content
	return nil
}
